'''
存放模型
'''

#从app.py文件导入db模型

from exts import db

class User(db.Model):
    __tablename__ = "User"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(200), nullable=False)


# 存储用户不常用的信息
# 与User是一对一的关系
class UserExtension(db.Model):
    __tablename__ = "UserExtension"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    school = db.Column(db.String(200), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey("User.id"))
    # db.backref
    # 1.在反向引用的时候，若需要传递一些其他的参数，那么就需要用到这个函数
    # 否则不需要，只要在relationship的backref参数上，设置反向引用的名称就可以了
    # 2.userlist=False,代表反向引用的时候，不是一个列表，而是一个对象
    user = db.relationship("User", backref=db.backref("extension", uselist=False))


# ORM映射与增删查询操作（实际上就是创建一个类
# 括号里面为上面的db.model
class Article(db.Model):
    # 定义表的名字
    __tablename__ = 'ab'
    # 定义第一个列名,类型为整型，主键，自动增长
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # 定义第二列,类型为字符串，且长度为200
    title = db.Column(db.String(200), nullable=False)
    # 第三列数据类型为文本
    content = db.Column(db.Text, nullable=False)

    # 添加作者id
    # 外键，
    # 外键的数据类型一定要看，所引用的字段类型
    # 2.db.ForeignKey("表名.字段名")
    #    3.外键属于数据框层面，不推荐直接在ORM中使用
    author_id = db.Column(db.Integer, db.ForeignKey("User.id"))

    # relationship
    # User为上面定义的模型，必须要和模型的名字保持一致
    # backref---反向引用，代表对方访问我的时候的字段名称articles加s为复数，
    author = db.relationship("User", backref="articles")